Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / feature / node / src / commonMain / kotlin / org / meshtastic / feature / node / metrics / EnvironmentMetricsState.kt

Displaying Raw • Download

feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/metrics/EnvironmentMetricsState.kt 9613ba91a7e169afe8ce2e98c6d384ef37f03421 (9613ba91) Text, 12.72 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.node.metrics

Tff7b72import T7ee787androidx.compose.ui.graphics.Color
Tff7b72import T7ee787org.meshtastic.core.model.util.UnitConversions
Tff7b72import T7ee787org.meshtastic.core.ui.theme.GraphColors.Amber
Tff7b72import T7ee787org.meshtastic.core.ui.theme.GraphColors.Blue
Tff7b72import T7ee787org.meshtastic.core.ui.theme.GraphColors.Chartreuse
Tff7b72import T7ee787org.meshtastic.core.ui.theme.GraphColors.Coral
Tff7b72import T7ee787org.meshtastic.core.ui.theme.GraphColors.Cyan
Tff7b72import T7ee787org.meshtastic.core.ui.theme.GraphColors.DeepOrange
Tff7b72import T7ee787org.meshtastic.core.ui.theme.GraphColors.Gold
Tff7b72import T7ee787org.meshtastic.core.ui.theme.GraphColors.Green
Tff7b72import T7ee787org.meshtastic.core.ui.theme.GraphColors.Indigo
Tff7b72import T7ee787org.meshtastic.core.ui.theme.GraphColors.InfantryBlue
Tff7b72import T7ee787org.meshtastic.core.ui.theme.GraphColors.LightGreen
Tff7b72import T7ee787org.meshtastic.core.ui.theme.GraphColors.Lime
Tff7b72import T7ee787org.meshtastic.core.ui.theme.GraphColors.Magenta
Tff7b72import T7ee787org.meshtastic.core.ui.theme.GraphColors.Orange
Tff7b72import T7ee787org.meshtastic.core.ui.theme.GraphColors.Pink
Tff7b72import T7ee787org.meshtastic.core.ui.theme.GraphColors.Purple
Tff7b72import T7ee787org.meshtastic.core.ui.theme.GraphColors.Red
Tff7b72import T7ee787org.meshtastic.core.ui.theme.GraphColors.SkyBlue
Tff7b72import T7ee787org.meshtastic.core.ui.theme.GraphColors.Teal
Tff7b72import T7ee787org.meshtastic.proto.Telemetry

Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72enum Tff7b72class T56d364EnvironmentTb4b4b4(Tff7b72val Te6edf3colorTb4b4b4: Te6edf3ColorTb4b4b4) Tb4b4b4{
Te6edf3TEMPERATURETb4b4b4(Te6edf3RedTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4) Tff7b72= Te6edf3telemetryTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3temperature
Tb4b4b4}Tb4b4b4,
Te6edf3HUMIDITYTb4b4b4(Te6edf3BlueTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4) Tff7b72= Te6edf3telemetryTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3relative_humidity
Tb4b4b4}Tb4b4b4,
Te6edf3SOIL_TEMPERATURETb4b4b4(Te6edf3PinkTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4) Tff7b72= Te6edf3telemetryTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3soil_temperature
Tb4b4b4}Tb4b4b4,
Te6edf3SOIL_MOISTURETb4b4b4(Te6edf3PurpleTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4) Tff7b72=
Te6edf3telemetryTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3soil_moistureTff7b72?.Te6edf3takeIf Tb4b4b4{ Tffa657it Tff7b72!Tff7b72= Tffa657IntTb4b4b4.Te6edf3MIN_VALUE Tb4b4b4}Tff7b72?.Te6edf3toFloatTb4b4b4(Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3BAROMETRIC_PRESSURETb4b4b4(Te6edf3GreenTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4) Tff7b72= Te6edf3telemetryTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3barometric_pressure
Tb4b4b4}Tb4b4b4,
Te6edf3GAS_RESISTANCETb4b4b4(Te6edf3InfantryBlueTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4) Tff7b72= Te6edf3telemetryTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3gas_resistance
Tb4b4b4}Tb4b4b4,
Te6edf3IAQTb4b4b4(Te6edf3CyanTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4) Tff7b72=
Te6edf3telemetryTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3iaqTff7b72?.Te6edf3takeIf Tb4b4b4{ Tffa657it Tff7b72!Tff7b72= Tffa657IntTb4b4b4.Te6edf3MIN_VALUE Tb4b4b4}Tff7b72?.Te6edf3toFloatTb4b4b4(Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3LUXTb4b4b4(Te6edf3GoldTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4) Tff7b72= Te6edf3telemetryTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3lux
Tb4b4b4}Tb4b4b4,
Te6edf3UV_LUXTb4b4b4(Te6edf3OrangeTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4) Tff7b72= Te6edf3telemetryTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3uv_lux
Tb4b4b4}Tb4b4b4,
Te6edf3WIND_SPEEDTb4b4b4(Te6edf3TealTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4) Tff7b72= Te6edf3telemetryTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3wind_speed
Tb4b4b4}Tb4b4b4,
Te6edf3RADIATIONTb4b4b4(Te6edf3LimeTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4)Tb4b4b4: Tffa657Float? Tff7b72= Te6edf3telemetryTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3radiation
Tb4b4b4}Tb4b4b4,
Te6edf3ONE_WIRE_TEMP_1Tb4b4b4(Te6edf3AmberTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4)Tb4b4b4: Tffa657Float? Tff7b72=
Te6edf3telemetryTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3one_wire_temperatureTff7b72?.Te6edf3getOrNullTb4b4b4(T79c0ff0Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3ONE_WIRE_TEMP_2Tb4b4b4(Te6edf3DeepOrangeTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4)Tb4b4b4: Tffa657Float? Tff7b72=
Te6edf3telemetryTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3one_wire_temperatureTff7b72?.Te6edf3getOrNullTb4b4b4(T79c0ff1Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3ONE_WIRE_TEMP_3Tb4b4b4(Te6edf3IndigoTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4)Tb4b4b4: Tffa657Float? Tff7b72=
Te6edf3telemetryTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3one_wire_temperatureTff7b72?.Te6edf3getOrNullTb4b4b4(T79c0ff2Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3ONE_WIRE_TEMP_4Tb4b4b4(Te6edf3LightGreenTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4)Tb4b4b4: Tffa657Float? Tff7b72=
Te6edf3telemetryTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3one_wire_temperatureTff7b72?.Te6edf3getOrNullTb4b4b4(T79c0ff3Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3ONE_WIRE_TEMP_5Tb4b4b4(Te6edf3MagentaTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4)Tb4b4b4: Tffa657Float? Tff7b72=
Te6edf3telemetryTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3one_wire_temperatureTff7b72?.Te6edf3getOrNullTb4b4b4(T79c0ff4Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3ONE_WIRE_TEMP_6Tb4b4b4(Te6edf3SkyBlueTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4)Tb4b4b4: Tffa657Float? Tff7b72=
Te6edf3telemetryTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3one_wire_temperatureTff7b72?.Te6edf3getOrNullTb4b4b4(T79c0ff5Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3ONE_WIRE_TEMP_7Tb4b4b4(Te6edf3ChartreuseTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4)Tb4b4b4: Tffa657Float? Tff7b72=
Te6edf3telemetryTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3one_wire_temperatureTff7b72?.Te6edf3getOrNullTb4b4b4(T79c0ff6Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3ONE_WIRE_TEMP_8Tb4b4b4(Te6edf3CoralTb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4)Tb4b4b4: Tffa657Float? Tff7b72=
Te6edf3telemetryTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3one_wire_temperatureTff7b72?.Te6edf3getOrNullTb4b4b4(T79c0ff7Tb4b4b4)
Tb4b4b4}Tb4b4b4, Tb4b4b4;

Tff7b72abstract Tff7b72fun Td2a8ffgetValueTb4b4b4(Te6edf3telemetryTb4b4b4: Te6edf3TelemetryTb4b4b4)Tb4b4b4: Tffa657Float?
Tb4b4b4}

T8b949e/**
* @param metrics the [List] of [Telemetry]
* @param shouldPlot a [List] the size of [Environment] used to determine if a metric should be plotted
* @param leftMinMax [Pair] with the min and max of the barometric pressure
* @param rightMinMax [Pair] with the combined min and max of: the temperature, humidity, and IAQ
* @param times [Pair] with the oldest and newest times in that order
*/
Tff7b72data Tff7b72class T56d364EnvironmentGraphingDataTb4b4b4(
Tff7b72val Te6edf3metricsTb4b4b4: Te6edf3ListTff7b72<Te6edf3TelemetryTff7b72>Tb4b4b4,
Tff7b72val Te6edf3shouldPlotTb4b4b4: Te6edf3ListTff7b72<Tffa657BooleanTff7b72>Tb4b4b4,
Tff7b72val Te6edf3leftMinMaxTb4b4b4: Te6edf3PairTff7b72<Tffa657FloatTb4b4b4, Tffa657FloatTff7b72> Tff7b72= Te6edf3PairTb4b4b4(T79c0ff0fTb4b4b4, T79c0ff0fTb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3rightMinMaxTb4b4b4: Te6edf3PairTff7b72<Tffa657FloatTb4b4b4, Tffa657FloatTff7b72> Tff7b72= Te6edf3PairTb4b4b4(T79c0ff0fTb4b4b4, T79c0ff0fTb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3timesTb4b4b4: Te6edf3PairTff7b72<Tffa657IntTb4b4b4, Tffa657IntTff7b72> Tff7b72= Te6edf3PairTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4,
Tb4b4b4)

Tff7b72data Tff7b72class T56d364EnvironmentMetricsStateTb4b4b4(Tff7b72val Te6edf3environmentMetricsTb4b4b4: Te6edf3ListTff7b72<Te6edf3TelemetryTff7b72> Tff7b72= Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72fun Td2a8ffhasEnvironmentMetricsTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3environmentMetricsTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)

T8b949e/**
* Prepares [environmentMetrics] for graphing.
*
* @return [EnvironmentGraphingData]
*/
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCyclomaticComplexMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72fun Td2a8ffenvironmentMetricsForGraphingTb4b4b4(Te6edf3useFahrenheitTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4)Tb4b4b4: Te6edf3EnvironmentGraphingData Tb4b4b4{
Tff7b72val Te6edf3telemetries Tff7b72= Te6edf3environmentMetrics
Tff7b72val Te6edf3shouldPlot Tff7b72= Te6edf3BooleanArrayTb4b4b4(Te6edf3EnvironmentTb4b4b4.Te6edf3entriesTb4b4b4.Te6edf3sizeTb4b4b4) Tb4b4b4{ Tff7b72false Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3telemetriesTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3EnvironmentGraphingDataTb4b4b4(Te6edf3metrics Tff7b72= Te6edf3telemetriesTb4b4b4, Te6edf3shouldPlot Tff7b72= Te6edf3shouldPlotTb4b4b4.Te6edf3toListTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}

T8b949e/* Grab the combined min and max for temp, humidity, soil_Temperature, soilMoisture and iaq. */
Tff7b72val Te6edf3minValues Tff7b72= Te6edf3mutableListOfTff7b72<Tffa657FloatTff7b72>Tb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3maxValues Tff7b72= Te6edf3mutableListOfTff7b72<Tffa657FloatTff7b72>Tb4b4b4(Tb4b4b4)

T8b949e// Temperature
Tff7b72val Te6edf3temperatures Tff7b72= Te6edf3telemetriesTb4b4b4.Te6edf3mapNotNull Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3temperatureTff7b72?.Te6edf3takeIf Tb4b4b4{ Tff7b72!Tffa657itTb4b4b4.Te6edf3isNaNTb4b4b4(Tb4b4b4) Tb4b4b4} Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3temperaturesTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72var Te6edf3minTempValue Tff7b72= Te6edf3temperaturesTb4b4b4.Te6edf3minOf Tb4b4b4{ Tffa657it Tb4b4b4}
Tff7b72var Te6edf3maxTempValue Tff7b72= Te6edf3temperaturesTb4b4b4.Te6edf3maxOf Tb4b4b4{ Tffa657it Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3useFahrenheitTb4b4b4) Tb4b4b4{
Te6edf3minTempValue Tff7b72= Te6edf3UnitConversionsTb4b4b4.Te6edf3celsiusToFahrenheitTb4b4b4(Te6edf3minTempValueTb4b4b4)
Te6edf3maxTempValue Tff7b72= Te6edf3UnitConversionsTb4b4b4.Te6edf3celsiusToFahrenheitTb4b4b4(Te6edf3maxTempValueTb4b4b4)
Tb4b4b4}
Te6edf3minValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3minTempValueTb4b4b4)
Te6edf3maxValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3maxTempValueTb4b4b4)
Te6edf3shouldPlotTff7b72[Te6edf3EnvironmentTb4b4b4.Te6edf3TEMPERATURETb4b4b4.Te6edf3ordinalTff7b72] Tff7b72= Tff7b72true
Tb4b4b4}

T8b949e// Relative Humidity
Tff7b72val Te6edf3humidities Tff7b72=
Te6edf3telemetriesTb4b4b4.Te6edf3mapNotNull Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3relative_humidityTff7b72?.Te6edf3takeIf Tb4b4b4{ Tff7b72!Tffa657itTb4b4b4.Te6edf3isNaNTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Tffa657it Tff7b72!Tff7b72= T79c0ff0.0f Tb4b4b4} Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3humiditiesTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3minValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3humiditiesTb4b4b4.Te6edf3minOf Tb4b4b4{ Tffa657it Tb4b4b4}Tb4b4b4)
Te6edf3maxValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3humiditiesTb4b4b4.Te6edf3maxOf Tb4b4b4{ Tffa657it Tb4b4b4}Tb4b4b4)
Te6edf3shouldPlotTff7b72[Te6edf3EnvironmentTb4b4b4.Te6edf3HUMIDITYTb4b4b4.Te6edf3ordinalTff7b72] Tff7b72= Tff7b72true
Tb4b4b4}

T8b949e// Soil Temperature
Tff7b72val Te6edf3soilTemperatures Tff7b72=
Te6edf3telemetriesTb4b4b4.Te6edf3mapNotNull Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3soil_temperatureTff7b72?.Te6edf3takeIf Tb4b4b4{ Tff7b72!Tffa657itTb4b4b4.Te6edf3isNaNTb4b4b4(Tb4b4b4) Tb4b4b4} Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3soilTemperaturesTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72var Te6edf3minSoilTemperatureValue Tff7b72= Te6edf3soilTemperaturesTb4b4b4.Te6edf3minOf Tb4b4b4{ Tffa657it Tb4b4b4}
Tff7b72var Te6edf3maxSoilTemperatureValue Tff7b72= Te6edf3soilTemperaturesTb4b4b4.Te6edf3maxOf Tb4b4b4{ Tffa657it Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3useFahrenheitTb4b4b4) Tb4b4b4{
Te6edf3minSoilTemperatureValue Tff7b72= Te6edf3UnitConversionsTb4b4b4.Te6edf3celsiusToFahrenheitTb4b4b4(Te6edf3minSoilTemperatureValueTb4b4b4)
Te6edf3maxSoilTemperatureValue Tff7b72= Te6edf3UnitConversionsTb4b4b4.Te6edf3celsiusToFahrenheitTb4b4b4(Te6edf3maxSoilTemperatureValueTb4b4b4)
Tb4b4b4}
Te6edf3minValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3minSoilTemperatureValueTb4b4b4)
Te6edf3maxValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3maxSoilTemperatureValueTb4b4b4)
Te6edf3shouldPlotTff7b72[Te6edf3EnvironmentTb4b4b4.Te6edf3SOIL_TEMPERATURETb4b4b4.Te6edf3ordinalTff7b72] Tff7b72= Tff7b72true
Tb4b4b4}

T8b949e// Soil Moisture
Tff7b72val Te6edf3soilMoistures Tff7b72=
Te6edf3telemetriesTb4b4b4.Te6edf3mapNotNull Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3soil_moistureTff7b72?.Te6edf3takeIf Tb4b4b4{ Tffa657it Tff7b72!Tff7b72= Tffa657IntTb4b4b4.Te6edf3MIN_VALUE Tb4b4b4} Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3soilMoisturesTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3minValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3soilMoisturesTb4b4b4.Te6edf3minOf Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)
Te6edf3maxValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3soilMoisturesTb4b4b4.Te6edf3maxOf Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)
Te6edf3shouldPlotTff7b72[Te6edf3EnvironmentTb4b4b4.Te6edf3SOIL_MOISTURETb4b4b4.Te6edf3ordinalTff7b72] Tff7b72= Tff7b72true
Tb4b4b4}

T8b949e// IAQ
Tff7b72val Te6edf3iaqs Tff7b72= Te6edf3telemetriesTb4b4b4.Te6edf3mapNotNull Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3iaqTff7b72?.Te6edf3takeIf Tb4b4b4{ Tffa657it Tff7b72!Tff7b72= Tffa657IntTb4b4b4.Te6edf3MIN_VALUE Tb4b4b4} Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3iaqsTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3minValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3iaqsTb4b4b4.Te6edf3minOf Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)
Te6edf3maxValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3iaqsTb4b4b4.Te6edf3maxOf Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)
Te6edf3shouldPlotTff7b72[Te6edf3EnvironmentTb4b4b4.Te6edf3IAQTb4b4b4.Te6edf3ordinalTff7b72] Tff7b72= Tff7b72true
Tb4b4b4}

T8b949e// Barometric Pressure
Tff7b72val Te6edf3pressures Tff7b72= Te6edf3telemetriesTb4b4b4.Te6edf3mapNotNull Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3barometric_pressureTff7b72?.Te6edf3takeIf Tb4b4b4{ Tff7b72!Tffa657itTb4b4b4.Te6edf3isNaNTb4b4b4(Tb4b4b4) Tb4b4b4} Tb4b4b4}
Tff7b72var Te6edf3minPressureValue Tff7b72= T79c0ff0f
Tff7b72var Te6edf3maxPressureValue Tff7b72= T79c0ff0f
Tff7b72if Tb4b4b4(Te6edf3pressuresTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3minPressureValue Tff7b72= Te6edf3pressuresTb4b4b4.Te6edf3minOf Tb4b4b4{ Tffa657it Tb4b4b4}
Te6edf3maxPressureValue Tff7b72= Te6edf3pressuresTb4b4b4.Te6edf3maxOf Tb4b4b4{ Tffa657it Tb4b4b4}
Te6edf3shouldPlotTff7b72[Te6edf3EnvironmentTb4b4b4.Te6edf3BAROMETRIC_PRESSURETb4b4b4.Te6edf3ordinalTff7b72] Tff7b72= Tff7b72true
Tb4b4b4}

T8b949e// Lux
Tff7b72val Te6edf3luxValues Tff7b72= Te6edf3telemetriesTb4b4b4.Te6edf3mapNotNull Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3luxTff7b72?.Te6edf3takeIf Tb4b4b4{ Tff7b72!Tffa657itTb4b4b4.Te6edf3isNaNTb4b4b4(Tb4b4b4) Tb4b4b4} Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3luxValuesTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3minValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3luxValuesTb4b4b4.Te6edf3minOf Tb4b4b4{ Tffa657it Tb4b4b4}Tb4b4b4)
Te6edf3maxValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3luxValuesTb4b4b4.Te6edf3maxOf Tb4b4b4{ Tffa657it Tb4b4b4}Tb4b4b4)
Te6edf3shouldPlotTff7b72[Te6edf3EnvironmentTb4b4b4.Te6edf3LUXTb4b4b4.Te6edf3ordinalTff7b72] Tff7b72= Tff7b72true
Tb4b4b4}

T8b949e// UVLux
Tff7b72val Te6edf3uvLuxValues Tff7b72= Te6edf3telemetriesTb4b4b4.Te6edf3mapNotNull Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3uv_luxTff7b72?.Te6edf3takeIf Tb4b4b4{ Tff7b72!Tffa657itTb4b4b4.Te6edf3isNaNTb4b4b4(Tb4b4b4) Tb4b4b4} Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3uvLuxValuesTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3minValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3uvLuxValuesTb4b4b4.Te6edf3minOf Tb4b4b4{ Tffa657it Tb4b4b4}Tb4b4b4)
Te6edf3maxValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3uvLuxValuesTb4b4b4.Te6edf3maxOf Tb4b4b4{ Tffa657it Tb4b4b4}Tb4b4b4)
Te6edf3shouldPlotTff7b72[Te6edf3EnvironmentTb4b4b4.Te6edf3UV_LUXTb4b4b4.Te6edf3ordinalTff7b72] Tff7b72= Tff7b72true
Tb4b4b4}

T8b949e// Wind Speed
Tff7b72val Te6edf3windSpeeds Tff7b72= Te6edf3telemetriesTb4b4b4.Te6edf3mapNotNull Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3wind_speedTff7b72?.Te6edf3takeIf Tb4b4b4{ Tff7b72!Tffa657itTb4b4b4.Te6edf3isNaNTb4b4b4(Tb4b4b4) Tb4b4b4} Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3windSpeedsTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3minValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3windSpeedsTb4b4b4.Te6edf3minOf Tb4b4b4{ Tffa657it Tb4b4b4}Tb4b4b4)
Te6edf3maxValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3windSpeedsTb4b4b4.Te6edf3maxOf Tb4b4b4{ Tffa657it Tb4b4b4}Tb4b4b4)
Te6edf3shouldPlotTff7b72[Te6edf3EnvironmentTb4b4b4.Te6edf3WIND_SPEEDTb4b4b4.Te6edf3ordinalTff7b72] Tff7b72= Tff7b72true
Tb4b4b4}

T8b949e// Radiation (uses separate fixed axis with minY=0 per Oscar's guidance)
Tff7b72val Te6edf3radiationValues Tff7b72=
Te6edf3telemetriesTb4b4b4.Te6edf3mapNotNull Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3environment_metricsTff7b72?.Te6edf3radiationTff7b72?.Te6edf3takeIf Tb4b4b4{ Tff7b72!Tffa657itTb4b4b4.Te6edf3isNaNTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Tffa657it Tff7b72> T79c0ff0f Tb4b4b4} Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3radiationValuesTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3minValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3radiationValuesTb4b4b4.Te6edf3minOf Tb4b4b4{ Tffa657it Tb4b4b4}Tb4b4b4)
Te6edf3maxValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3radiationValuesTb4b4b4.Te6edf3maxOf Tb4b4b4{ Tffa657it Tb4b4b4}Tb4b4b4)
Te6edf3shouldPlotTff7b72[Te6edf3EnvironmentTb4b4b4.Te6edf3RADIATIONTb4b4b4.Te6edf3ordinalTff7b72] Tff7b72= Tff7b72true
Tb4b4b4}

T8b949e// 1-Wire temperature sensors (up to 8 channels, Fahrenheit-aware)
Tff7b72val Te6edf3oneWireEntries Tff7b72=
Te6edf3listOfTb4b4b4(
Te6edf3EnvironmentTb4b4b4.Te6edf3ONE_WIRE_TEMP_1Tb4b4b4,
Te6edf3EnvironmentTb4b4b4.Te6edf3ONE_WIRE_TEMP_2Tb4b4b4,
Te6edf3EnvironmentTb4b4b4.Te6edf3ONE_WIRE_TEMP_3Tb4b4b4,
Te6edf3EnvironmentTb4b4b4.Te6edf3ONE_WIRE_TEMP_4Tb4b4b4,
Te6edf3EnvironmentTb4b4b4.Te6edf3ONE_WIRE_TEMP_5Tb4b4b4,
Te6edf3EnvironmentTb4b4b4.Te6edf3ONE_WIRE_TEMP_6Tb4b4b4,
Te6edf3EnvironmentTb4b4b4.Te6edf3ONE_WIRE_TEMP_7Tb4b4b4,
Te6edf3EnvironmentTb4b4b4.Te6edf3ONE_WIRE_TEMP_8Tb4b4b4,
Tb4b4b4)
Te6edf3oneWireEntriesTb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3entry Tff7b72-Tff7b72>
Tff7b72val Te6edf3values Tff7b72= Te6edf3telemetriesTb4b4b4.Te6edf3mapNotNull Tb4b4b4{ Te6edf3entryTb4b4b4.Te6edf3getValueTb4b4b4(Tffa657itTb4b4b4)Tff7b72?.Te6edf3takeIf Tb4b4b4{ Te6edf3v Tff7b72-Tff7b72> Tff7b72!Te6edf3vTb4b4b4.Te6edf3isNaNTb4b4b4(Tb4b4b4) Tb4b4b4} Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3valuesTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72var Te6edf3minVal Tff7b72= Te6edf3valuesTb4b4b4.Te6edf3minOf Tb4b4b4{ Tffa657it Tb4b4b4}
Tff7b72var Te6edf3maxVal Tff7b72= Te6edf3valuesTb4b4b4.Te6edf3maxOf Tb4b4b4{ Tffa657it Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3useFahrenheitTb4b4b4) Tb4b4b4{
Te6edf3minVal Tff7b72= Te6edf3UnitConversionsTb4b4b4.Te6edf3celsiusToFahrenheitTb4b4b4(Te6edf3minValTb4b4b4)
Te6edf3maxVal Tff7b72= Te6edf3UnitConversionsTb4b4b4.Te6edf3celsiusToFahrenheitTb4b4b4(Te6edf3maxValTb4b4b4)
Tb4b4b4}
Te6edf3minValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3minValTb4b4b4)
Te6edf3maxValuesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3maxValTb4b4b4)
Te6edf3shouldPlotTff7b72[Te6edf3entryTb4b4b4.Te6edf3ordinalTff7b72] Tff7b72= Tff7b72true
Tb4b4b4}
Tb4b4b4}

Tff7b72val Te6edf3min Tff7b72= Tff7b72if Tb4b4b4(Te6edf3minValuesTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) T79c0ff0f Tff7b72else Te6edf3minValuesTb4b4b4.Te6edf3minOf Tb4b4b4{ Tffa657it Tb4b4b4}
Tff7b72val Te6edf3max Tff7b72= Tff7b72if Tb4b4b4(Te6edf3maxValuesTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) T79c0ff1f Tff7b72else Te6edf3maxValuesTb4b4b4.Te6edf3maxOf Tb4b4b4{ Tffa657it Tb4b4b4}

Tff7b72val Te6edf3oldest Tff7b72= Te6edf3telemetriesTb4b4b4.Te6edf3minBy Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3time Tb4b4b4}
Tff7b72val Te6edf3newest Tff7b72= Te6edf3telemetriesTb4b4b4.Te6edf3maxBy Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3time Tb4b4b4}

Tff7b72return Te6edf3EnvironmentGraphingDataTb4b4b4(
Te6edf3metrics Tff7b72= Te6edf3telemetriesTb4b4b4,
Te6edf3shouldPlot Tff7b72= Te6edf3shouldPlotTb4b4b4.Te6edf3toListTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3leftMinMax Tff7b72= Te6edf3PairTb4b4b4(Te6edf3minPressureValueTb4b4b4, Te6edf3maxPressureValueTb4b4b4)Tb4b4b4,
Te6edf3rightMinMax Tff7b72= Te6edf3PairTb4b4b4(Te6edf3minTb4b4b4, Te6edf3maxTb4b4b4)Tb4b4b4,
Te6edf3times Tff7b72= Te6edf3PairTb4b4b4(Te6edf3oldestTb4b4b4.Te6edf3timeTb4b4b4, Te6edf3newestTb4b4b4.Te6edf3timeTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.09s